libcurl Callback

콜백

libcurl 내의 많은 작업은 콜백을 사용하여 제어됩니다. 콜백은 libcurl이 특정 작업을 완료하기 위해 특정 시점에서 호출하는 libcurl에 제공되는 함수 포인터입니다.

각 콜백에는 문서화된 특정 목적이 있으며 올바른 인수를 수락하고 문서화된 반환 코드와 반환 값을 반환하여 libcurl이 원하는 방식으로 수행할 수 있도록 정확한 함수 프로토타입으로 작성해야 합니다.

각 콜백 옵션에는 연결된 “사용자 포인터”를 설정하는 동반 옵션도 있습니다. 이 사용자 포인터는 libcurl이 만지거나 신경 쓰지 않고 콜백에 대한 인수로 전달하는 포인터입니다. 이를 통해 예를 들어 로컬 데이터에 대한 포인터를 콜백 함수까지 전달할 수 있습니다.

libcurl 함수 문서에 명시적으로 언급되지 않은 한 libcurl 콜백 내에서 libcurl 함수를 호출하는 것은 불법입니다.

데이터 쓰기

쓰기 콜백은 CURLOPT_WRITEFUNCTION으로 설정됩니다.

1
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_callback);

write_callback 함수는 다음 프로토타입과 일치해야 합니다.

1
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);

이 콜백 함수는 저장해야 하는 데이터가 수신되는 즉시 libcurl에 의해 호출됩니다. ptr은 전달된 데이터를 가리키며 해당 데이터의 크기는 nmemb와 곱한 크기입니다.

이 콜백이 설정되지 않은 경우 libcurl은 기본적으로 ‘fwrite’를 대신 사용합니다.

쓰기 콜백은 모든 호출에서 가능한 한 많은 데이터를 전달하지만 어떤 가정도 해서는 안 됩니다. 1바이트일 수도 있고 수천 바이트일 수도 있습니다. 쓰기 콜백에 전달될 본문 데이터의 최대 양은 curl.h 헤더 파일 CURL_MAX_WRITE_SIZE에 정의되어 있습니다(일반적인 기본값은 16KB). 헤더 데이터가 쓰기 콜백으로 전달되도록 이 전송에 대해 CURLOPT_HEADER가 활성화된 경우 전달된 헤더 데이터의 최대 CURL_MAX_HTTP_HEADER 바이트를 얻을 수 있습니다. 이것은 일반적으로 100KB를 의미합니다.

이 함수는 전송된 파일이 비어 있는 경우 0바이트 데이터로 호출될 수 있습니다.

이 함수에 전달된 데이터는 0으로 종료되지 않습니다. 예를 들어, printf의 %s 연산자를 사용하여 내용을 표시하거나 strcpy를 사용하여 복사할 수 없습니다.

이 콜백은 실제로 처리된 바이트 수를 반환해야 합니다. 해당 번호가 콜백 함수에 전달된 번호와 다르면 라이브러리에 오류 상태를 알립니다. 이로 인해 전송이 중단되고 사용된 libcurl 함수는 CURLE_WRITE_ERROR를 반환합니다.

userdata 인수의 콜백에 전달된 사용자 포인터는 CURLOPT_WRITEDATA로 설정됩니다.

1
curl_easy_setopt(handle, CURLOPT_WRITEDATA, custom_pointer);

메모리에 저장

인기 있는 요구는 검색된 응답을 메모리에 저장하는 것이며 위에서 설명한 콜백이 이를 지원합니다. 이 작업을 수행할 때 응답이 잠재적으로 엄청날 수 있으므로 주의하십시오.

다음과 유사한 방식으로 콜백을 구현합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
struct response {
char *memory;
size_t size;
};

static size_t
mem_cb(void *contents, size_t size, size_t nmemb, void *userp)
{
size_t realsize = size * nmemb;
struct repsonse *mem = (struct response *)userp;

char *ptr = realloc(mem->memory, mem->size + realsize + 1);
if(!ptr) {
/* out of memory! */
printf("not enough memory (realloc returned NULL)\n");
return 0;
}

mem->memory = ptr;
memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;

return realsize;
}

int main()
{
struct response chunk;

/* send all data to this function */
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, mem_cb);

/* we pass our 'chunk' to the callback function */
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);

}

데이터 읽기

읽기 콜백은 CURLOPT_READFUNCTION으로 설정됩니다.

1
curl_easy_setopt(handle, CURLOPT_READFUNCTION, read_callback);

read`_callback 함수는 다음 프로토타입과 일치해야 합니다.

1
size_t read_callback(char *buffer, size_t size, size_t nitems, void *stream);

이 콜백 함수는 서버에 데이터를 보내려고 할 때 libcurl에 의해 호출됩니다. 이것은 데이터를 업로드하거나 서버로 보내도록 설정한 전송입니다. 이 콜백은 모든 데이터가 전달되거나 전송이 실패할 때까지 계속해서 호출됩니다.

스트림 포인터는 CURLOPT_READDATA를 사용하여 개인 데이터 세트를 가리킵니다.

1
curl_easy_setopt(handle, CURLOPT_READDATA, custom_pointer);

이 콜백이 설정되지 않은 경우 libcurl은 기본적으로 ‘fread’를 대신 사용합니다.

포인터 버퍼가 가리키는 데이터 영역은 함수에 의해 nitems 수를 곱한 최대 크기로 채워져야 합니다. 그런 다음 콜백은 해당 메모리 영역에 저장된 바이트 수를 반환하거나 데이터 끝에 도달한 경우 0을 반환해야 합니다. 콜백은 또한 libcurl이 즉시 실패를 반환하거나 특정 전송을 일시 중지하도록 하는 몇 가지 “마법” 반환 코드를 반환할 수 있습니다. 자세한 내용은 CURLOPT_READFUNCTION 매뉴얼 페이지를 참조하십시오.

진행 정보

진행 콜백은 전송의 전체 수명 동안 각 전송에 대해 정기적으로 반복적으로 호출되는 것입니다. 이전 콜백은 CURLOPT_PROGRESSFUNCTION으로 설정되었지만 최신 콜백은 CURLOPT_XFERINFOFUNCTION으로 설정되었습니다.

1
curl_easy_setopt(handle, CURLOPT_XFERINFOFUNCTION, xfer_callback);

xfer_callback 함수는 다음 프로토타입과 일치해야 합니다.

1
2
int xfer_callback(void *clientp, curl_off_t dltotal, curl_off_t dlnow,
curl_off_t ultotal, curl_off_t ulnow);

이 옵션이 설정되고 CURLOPT_NOPROGRESS가 0(영)으로 설정되면 이 콜백 함수는 libcurl에 의해 빈번한 간격으로 호출됩니다. 데이터가 전송되는 동안에는 자주 호출되며 아무 것도 전송되지 않는 경우와 같이 느린 시간에는 초당 약 1회의 호출로 느려질 수 있습니다.

clientp 포인터는 CURLOPT_XFERINFODATA를 사용하여 개인 데이터 세트를 가리킵니다.

1
curl_easy_setopt(handle, CURLOPT_XFERINFODATA, custom_pointer);

콜백은 libcurl이 전송하고 전송한 데이터의 양을 바이트 수로 알려줍니다.

  • dltotal은 libcurl이 이 전송에서 다운로드할 것으로 예상하는 총 바이트 수입니다.
  • dlnow는 지금까지 다운로드한 바이트 수입니다.
  • ultotal은 libcurl이 이 전송에서 업로드할 것으로 예상하는 총 바이트 수입니다.
  • ulnow는 지금까지 업로드된 바이트 수입니다.

콜백에 전달된 알 수 없거나 사용되지 않은 인수 값은 0으로 설정됩니다(예: 데이터만 다운로드하는 경우 업로드 크기는 0으로 유지됨). 여러 번 콜백은 데이터 크기를 알기 전에 먼저 한 번 이상 호출되므로 이를 처리하도록 프로그램을 만들어야 합니다.

이 콜백에서 0이 아닌 값을 반환하면 libcurl이 전송을 중단하고 CURLE_ABORTED_BY_CALLBACK을 반환합니다.

다중 인터페이스로 데이터를 전송하는 경우 전송을 수행하는 적절한 libcurl 함수를 호출하지 않는 한 유휴 기간 동안 이 함수가 호출되지 않습니다.

(더 이상 사용되지 않는 콜백 CURLOPT_PROGRESSFUNCTION은 동일하게 작동했지만 curl_off_t 유형의 인수를 사용하는 대신 double을 사용했습니다.)

헤더 데이터

헤더 콜백은 CURLOPT_HEADERFUNCTION으로 설정됩니다.

1
curl_easy_setopt(handle, CURLOPT_HEADERFUNCTION, header_callback);

header_callback 함수는 다음 프로토타입과 일치해야 합니다.

1
size_t header_callback(char *ptr, size_t size, size_t nmemb, void *userdata);

이 콜백 함수는 헤더가 수신되는 즉시 libcurl에 의해 호출됩니다. ptr은 전달된 데이터를 가리키며 해당 데이터의 크기는 nmemb와 곱한 크기입니다. libcurl은 헤더를 버퍼링하고 “전체” 헤더만 이 콜백에 하나씩 전달합니다.

이 함수에 전달된 데이터는 0으로 종료되지 않습니다! 예를 들어, printf의 %s 연산자를 사용하여 내용을 표시하거나 strcpy를 사용하여 복사할 수 없습니다.

이 콜백은 실제로 처리된 바이트 수를 반환해야 합니다. 해당 번호가 콜백 함수에 전달된 번호와 다르면 라이브러리에 오류 조건을 알립니다. 이로 인해 전송이 중단되고 사용된 libcurl 함수는 CURLE_WRITE_ERROR를 반환합니다.

userdata 인수의 콜백에 전달된 사용자 포인터는 CURLOPT_HEADERDATA로 설정됩니다.

1
curl_easy_setopt(handle, CURLOPT_HEADERDATA, custom_pointer);

Debug

디버그 콜백은 CURLOPT_DEBUGFUNCTION으로 설정됩니다.

1
curl_easy_setopt(handle, CURLOPT_DEBUGFUNCTION, debug_callback);

debug_callback 함수는 다음 프로토타입과 일치해야 합니다.

1
2
3
4
5
int debug_callback(CURL *handle,
curl_infotype type,
char *data,
size_t size,
void *userdata);

이 콜백 함수는 라이브러리의 기본 상세 출력 함수를 대체하며 모든 디버그 및 추적 메시지에 대해 호출되어 애플리케이션이 무슨 일이 일어나고 있는지 이해하도록 돕습니다. type 인수는 헤더, 데이터 또는 SSL 데이터와 같이 제공되는 데이터의 종류와 흐름 방향을 설명합니다.

이 콜백의 일반적인 용도는 libcurl이 보내고 받는 모든 데이터의 전체 추적을 가져오는 것입니다. 이 콜백으로 전송되는 데이터는 예를 들어 HTTPS 또는 기타 암호화된 프로토콜이 사용되는 경우에도 항상 암호화되지 않은 버전입니다.
이 콜백은 0을 반환하거나 오류 코드와 함께 전송을 중지해야 합니다.

userdata 인수의 콜백에 전달된 사용자 포인터는 CURLOPT_DEBUGDATA로 설정됩니다.

1
curl_easy_setopt(handle, CURLOPT_DEBUGDATA, custom_pointer);

sockopt

sockopt 콜백은 CURLOPT_SOCKOPTFUNCTION으로 설정됩니다.

1
curl_easy_setopt(handle, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);

sockopt_callback 함수는 다음 프로토타입과 일치해야 합니다.

1
2
3
int sockopt_callback(void *clientp,
curl_socket_t curlfd,
curlsocktype purpose);

이 콜백 함수는 새 소켓이 생성되었지만 연결 호출 전에 응용 프로그램이 특정 소켓 옵션을 변경할 수 있도록 libcurl에 의해 호출됩니다.

clientp 포인터는 CURLOPT_SOCKOPTDATA를 사용하여 개인 데이터 세트를 가리킵니다.

1
curl_easy_setopt(handle, CURLOPT_SOCKOPTDATA, custom_pointer);

이 콜백은 다음을 반환해야 합니다.

  • CURL_SOCKOPT_OK 성공
  • libcurl에 복구할 수 없는 오류를 알리는 CURL_SOCKOPT_ERROR
  • CURL_SOCKOPT_ALREADY_CONNECTED는 성공을 알리지만 소켓이 실제로 이미 대상에 연결되어 있음을 나타냅니다.

SSL context

libcurl은 CURLOPT_SSL_CTX_FUNCTION이라는 특수한 TLS 관련 콜백을 제공합니다. 이 옵션은 OpenSSL, wolfSSL 또는 mbedTLS로 구동되는 libcurl에서만 작동하며 libcurl이 다른 TLS 백엔드로 빌드된 경우에는 아무 작업도 수행하지 않습니다.

이 콜백은 응용 프로그램이 TLS 초기화 동작을 수정할 수 있는 마지막 기회를 제공하기 위해 다른 모든 TLS 관련 옵션을 처리한 후 TLS 연결 초기화 직전에 libcurl에 의해 호출됩니다. 두 번째 인수에서 콜백에 전달된 ssl_ctx 매개변수는 실제로 OpenSSL 또는 wolfSSL의 경우 SSL 라이브러리의 SSL_CTX에 대한 포인터이고 mbedTLS의 경우 mbedtls_ssl_config에 대한 포인터입니다. 콜백에서 오류가 반환되면 연결 설정을 시도하지 않고 작업에서 콜백의 오류 코드를 반환합니다. CURLOPT_SSL_CTX_DATA 옵션으로 userptr 인수를 설정합니다.

이 함수는 TLS 협상 중에 서버에 대한 모든 새 연결에서 호출됩니다. TLS 컨텍스트는 매번 새로 초기화된 개체를 가리킵니다.

Seek and ioctl

이 콜백은 CURLOPT_SEEKFUNCTION으로 설정됩니다.

콜백은 입력 스트림의 특정 위치를 찾기 위해 libcurl에 의해 호출되며 재개된 업로드에서 파일을 빨리 전달하는 데 사용할 수 있습니다(일반 읽기 기능/콜백으로 업로드된 모든 바이트를 읽는 대신). 데이터가 이미 서버로 전송되어 다시 전송해야 할 때 스트림을 되감기 위해 호출되기도 합니다. 이는 다중 패스 인증 방법으로 HTTP PUT 또는 POST를 수행할 때 또는 기존 HTTP 연결이 너무 늦게 재사용되어 서버가 연결을 닫을 때 발생할 수 있습니다. 이 함수는 fseek(3) 또는 lseek(3)처럼 작동해야 하며 libcurl이 현재 SEEK_SET만 전달하지만 SEEK_SET, SEEK_CUR 또는 SEEK_END를 원본에 대한 인수로 가져옵니다.

콜백으로 전송된 사용자 정의 userp는 CURLOPT_SEEKDATA로 설정한 포인터입니다.

콜백 함수는 성공 시 CURL_SEEKFUNC_OK를 반환해야 하고, 업로드 작업이 실패하도록 하려면 CURL_SEEKFUNC_FAIL을 반환해야 하며, 탐색이 실패한 동안 가능한 경우 libcurl이 자유롭게 문제를 해결할 수 있음을 나타내려면 CURL_SEEKFUNC_CANTSEEK를 반환해야 합니다. 후자는 때때로 입력 또는 이와 유사한 것을 대신 읽어서 수행할 수 있습니다.

입력 인수를 fseek(3) 또는 lseek(3)에 직접 전달하는 경우 offset의 데이터 유형은 많은 시스템에서 curl_off_t에 대해 정의된 것과 동일하지 않습니다.

네트워크 데이터 변환

네트워크 콜백과의 변환

비 ASCII 플랫폼의 경우 CURLOPT_CONV_FROM_NETWORK_FUNCTION이 제공됩니다. 이 기능은 네트워크 인코딩에서 호스트 인코딩으로 변환되어야 합니다.

CURLOPT_CONV_TO_NETWORK_FUNCTION은 호스트 인코딩에서 네트워크 인코딩으로 변환해야 합니다. 네트워크를 통해 명령이나 ASCII 데이터를 보낼 때 사용합니다.

UTF-8 콜백에서 변환

CURLOPT_CONV_FROM_UTF8_FUNCTION은 UTF-8 인코딩에서 호스트 인코딩으로 변환해야 합니다. SSL 처리에만 필요합니다.

Opensocket and closesocket

때때로 libcurl이 작업에 사용할 소켓을 보다 정확하게 제어하기를 원하는 상황이 발생합니다. libcurl은 socket()에 대한 libcurl의 자체 호출과 동일한 파일 설명자의 후속 close()를 대체하는 이 콜백 쌍을 제공합니다.

파일 설명자 제공

CURLOPT_OPENSOCKETFUNCTION 콜백을 설정하여 libcurl이 사용할 파일 설명자를 반환하는 사용자 정의 함수를 제공할 수 있습니다.

1
curl_easy_setopt(handle, CURLOPT_OPENSOCKETFUNCTION, opensocket_callback);

opensocket_callback 함수는 다음 프로토타입과 일치해야 합니다.

1
2
3
curl_socket_t opensocket_callback(void *clientp,
curlsocktype purpose,
struct curl_sockaddr *address);

콜백은 CURLOPT_OPENSOCKETDATA로 설정한 단순히 불투명한 포인터인 clientp를 첫 번째 인수로 가져옵니다.

다른 두 인수는 소켓을 사용할 목적과 주소를 식별하는 데이터를 전달합니다. 목적은 소켓이 생성되는 상황을 식별하는 CURLSOCKTYPE_IPCXN 또는 CURLSOCKTYPE_ACCEPT 값을 가진 typedef입니다. “수락” 경우는 FTP 활성 모드가 사용될 때 libcurl이 들어오는 FTP 연결을 수락하는 데 사용되며 libcurl이 자체 나가는 연결을 위한 소켓을 만드는 다른 모든 경우에는 IPCXN 값이 전달됩니다.

주소 포인터는 이 소켓이 생성되는 네트워크 대상의 IP 주소를 설명하는 curl_sockaddr 구조체를 가리킵니다. 예를 들어 콜백은 이 정보를 사용하여 특정 주소 또는 주소 범위를 화이트리스트 또는 블랙리스트에 추가할 수 있습니다.

어떤 종류의 네트워크 필터 또는 변환 계층을 제공하려는 경우 socketopen 콜백은 해당 구조체의 대상 주소를 수정할 수도 있습니다.

콜백은 파일 설명자 또는 CURL_SOCKET_BAD를 반환해야 합니다. 그러면 libcurl 내에서 복구할 수 없는 오류가 발생하고 결국에는 수행 함수에서 CURLE_COULDNT_CONNECT를 반환합니다.

이미 서버에 연결된 파일 설명자를 반환하려면 sockopt 콜백도 설정하고 올바른 반환 값을 반환하는지 확인해야 합니다.

curl_sockaddress 구조체는 다음과 같습니다.

1
2
3
4
5
6
7
struct curl_sockaddr {
int family;
int socktype;
int protocol;
unsigned int addrlen;
struct sockaddr addr;
};

Socket close callback

열린 소켓에 대한 해당 콜백은 물론 닫기 소켓입니다. 일반적으로 파일 설명자를 제공하는 사용자 지정 방법을 제공할 때 자체 정리 버전도 제공하려고 합니다.

1
curl_easy_setopt(handle, CURLOPT_CLOSESOCKETFUNCTION, closesocket_callback);

closesocket_callback 함수는 다음 프로토타입과 일치해야 합니다.

1
int closesocket_callback(void *clientp, curl_socket_t item);

SSH key

이 콜백은 CURLOPT_SSH_KEYFUNCTION으로 설정됩니다.

이것은 known_host 매칭이 완료되었을 때 호출되어 애플리케이션이 libcurl을 어떻게 처리할지 결정할 수 있도록 합니다. 콜백은 CURLOPT_SSH_KNOWNHOSTS도 설정된 경우에만 호출됩니다.

콜백에 대한 인수에는 이전 키와 새 키가 있으며 콜백은 libcurl에게 작동 방법을 알려주는 반환 코드를 반환할 것으로 예상됩니다.

  • CURLKHSTAT_FINE_REPLACE - 새 호스트 + 키가 수락되고 libcurl은 연결을 계속하기 전에 이전 호스트 + 키를 known_hosts 파일로 바꿉니다. 이것은 또한 새로운 호스트+키 콤보가 이미 존재하지 않는 경우 메모리에 보관된 known_host 풀에 추가됩니다. 파일에 데이터를 추가하는 것은 파일을 새 복사본으로 완전히 교체하여 수행되므로 파일의 권한이 이를 허용해야 합니다.
  • CURLKHSTAT_FINE_ADD_TO_FILE - 호스트+키가 수락되고 libcurl은 연결을 계속하기 전에 이것을 known_hosts 파일에 추가합니다. 이것은 또한 이미 존재하지 않는 경우 메모리에 보관된 known_host 풀에 host+key 콤보를 추가합니다. 파일에 데이터를 추가하는 것은 파일을 새 복사본으로 완전히 교체하여 수행되므로 파일의 권한이 이를 허용해야 합니다.
  • CURLKHSTAT_FINE - 호스트 + 키가 수락되면 libcurl이 연결을 계속합니다. 이것은 또한 이미 존재하지 않는 경우 메모리에 보관된 known_host 풀에 host+key 콤보를 추가합니다.
  • CURLKHSTAT_REJECT - 호스트 + 키가 거부되었습니다. libcurl은 계속하기 위해 연결을 거부하고 닫힙니다.
  • CURLKHSTAT_DEFER - 호스트 + 키가 거부되지만 SSH 연결은 활성 상태로 유지되도록 요청됩니다. 이 기능은 앱이 어떻게든 호스트+키 상황으로 돌아가서 조치를 취한 다음 처음부터 다시 설정하는 오버헤드 없이 재시도하려고 할 때 사용할 수 있습니다.

RTSP interleaved data

CURLOPT_INTERLEAVEFUNCTION 옵션이 있는 콜백.

이 콜백은 RTSP 전송을 수행할 때 인터리브된 RTP 데이터를 수신하자마자 libcurl에 의해 호출됩니다. 각 $ 블록에 대해 호출되므로 정확히 하나의 상위 계층 프로토콜 단위(예: 하나의 RTP 패킷)를 포함합니다. libcurl은 인터리브 처리된 헤더와 각 호출에 대해 포함된 데이터를 씁니다. 첫 번째 바이트는 항상 ASCII 달러 기호입니다. 달러 기호 다음에 1바이트 채널 식별자가 오고 네트워크 바이트 순서로 2바이트 정수 길이가 옵니다. RTP 인터리빙의 작동 방식에 대한 자세한 내용은 RFC2326 섹션 10.12를 참조하세요. 설정하지 않거나 NULL로 설정하면 curl은 기본 쓰기 기능을 사용합니다.

CURLOPT_INTERLEAVEDATA 포인터는 콜백의 userdata 인수로 전달됩니다.

FTP 와일드 카드 일치

libcurl은 FTP 와일드 카드 일치를 지원합니다. CURLOPT_WILDCARDMATCH1L로 설정한 다음 URL의 파일 이름 부분에 “와일드 카드 패턴”을 사용하여 이 기능을 사용합니다.

와일드 카드 패턴

기본 libcurl 와일드 카드 일치 기능은 다음을 지원합니다.

* - 별표

1
ftp://example.com/some/path/*.txt

some/path 디렉토리의 모든 txt 파일을 일치시키려면. 동일한 패턴 문자열 내에서는 두 개의 별표만 사용할 수 있습니다.

? - 물음표

물음표는 모든(정확히 하나의) 문자와 일치합니다. photo1.jpegphoto7.jpeg라는 파일이 있는 경우 이 패턴은 다음과 일치할 수 있습니다.

1
ftp://example.com/some/path/photo?.jpeg

[ - BRACKET 표현
왼쪽 대괄호는 대괄호 표현식을 엽니다. 대괄호 식에서 물음표와 별표는 특별한 의미가 없습니다. 각 대괄호 표현식은 오른쪽 대괄호(])로 끝나고 정확히 한 문자와 일치합니다. 몇 가지 예는 다음과 같습니다.

[a-zA-Z0-9] 또는 [f-gF-G] - 문자 간격

[abc] - 문자 열거

[^abc] 또는 [!abc] - 부정

[[:name:]] 클래스 표현식입니다. 지원되는 클래스는 alnum, lower, space, alpha, digit, print, upper, blank, graph, xdigit입니다.

[][-!^] - 특수 케이스, \-, ], [, ! 또는 ^.

[\\[\\]\\\\] - 이스케이프 구문. [, ] 또는 \\와 일치합니다.

위의 규칙을 사용하여 파일 이름 패턴을 구성할 수 있습니다.

1
ftp://example.com/some/path/[a-z[:upper:]\\\\].jpeg

FTP chunk 콜백

FTP 와일드 카드 일치가 사용되면 일치하는 파일에 대한 전송이 시작되기 전에 CURLOPT_CHUNK_BGN_FUNCTION 콜백이 호출됩니다.

콜백은 다음 반환 코드 중 하나를 반환하도록 선택하여 libcurl에게 파일로 무엇을 할 것인지 알릴 수 있습니다.

  • CURL_CHUNK_BGN_FUNC_OK 파일 전송
  • CURL_CHUNK_BGN_FUNC_SKIP
  • CURL_CHUNK_BGN_FUNC_FAIL 오류로 인해 중지
  • 일치하는 파일이 전송되거나 건너뛴 후 CURLOPT_CHUNK_END_FUNCTION 콜백이 호출됩니다.

끝 chunk 콜백은 성공 또는 오류만 반환할 수 있습니다.

FTP 매칭 콜백

기본 패턴 일치 기능이 마음에 들지 않으면 CURLOPT_FNMATCH_FUNCTION 옵션을 대체 기능으로 설정하여 고유한 대체 기능을 제공할 수 있습니다.

Resolver 시작

CURLOPT_RESOLVER_START_FUNCTION으로 설정된 이 콜백 함수는 새로운 확인 요청이 시작되기 전에 매번 libcurl에 의해 호출되며 어떤 CURL * 핸들이 확인 대상인지 지정합니다.

트레일러 보내기

“Trailers”은 전송이 끝날 때 헤더를 전달할 수 있는 HTTP/1 기능입니다. 이 콜백은 업로드가 완료된 후 컬이 있는 트레일러를 보내고 싶을 때 사용됩니다. 청크 인코딩된 POST 형식의 업로드입니다.

CURLOPT_TRAILERFUNCTION으로 설정된 콜백이 호출되고 함수는 목록에 헤더를 추가할 수 있습니다. 하나 또는 여러 개. 완료되면 libcurl은 이를 서버에 트레일러로 보냅니다.

HSTS

HSTS, HTTP Strict Transport Security의 경우 libcurl은 할당이 규칙에 대한 저장소를 구현할 수 있도록 두 개의 콜백을 제공합니다. 그런 다음 콜백은 영구 저장소에서 HSTS 정책을 읽고/쓰도록 설정됩니다.

CURLOPT_HSTSREADFUNCTION을 사용하여 응용 프로그램은 libcurl에 있는 HSTS 데이터를 읽는 데 사용하는 기능을 제공합니다. CURLOPT_HSTSWRITEFUNCTION은 libcurl이 데이터를 쓰기 위해 호출하는 해당 함수입니다.

Prereq

여기서 “Prereq”는 요청이 발행되기 직전을 의미합니다. 바로 이 콜백이 호출되는 순간입니다.

CURLOPT_PREREQFUNCTION으로 함수를 설정하면 호출되고 인수에 IP 주소와 포트 번호가 전달됩니다. 이를 통해 애플리케이션은 시작 직전에 전송에 대해 알 수 있으며 원할 경우 이 특정 전송을 취소할 수도 있습니다.

공유하기